//
// primitive.c
// methods for the primitive types
//
// (c) 2008 why the lucky stiff, the freelance professor
//
#include <stdio.h>
#include <stdlib.h>
#include "potion.h"
#include "internal.h"

// 直接返回 true 。
PN_MSG(potion_nil_is_nil) {
  return PN_TRUE;
}

// 真为 1 ，假为 0 。
PN_MSG(potion_bool_number) {
  return PN_NUM(PN_TEST(self));
}

// 真为 'true' ， 假为 'false' 。
PN_MSG(potion_bool_string) {
  return PN_TEST(self) ? PN_LITERAL("true") : PN_LITERAL("false");
}

// 直接返回 false 。
// 未使用 PN_MSG(potion_any_is_nil) {
//   return PN_FALSE;
// }

// 注册虚表 nil 和 bool 的消息。
void potion_primitive_init(Potion *P) {
  PN nil_vt = PN_VTABLE(PN_TNIL);
  PN boo_vt = PN_VTABLE(PN_TBOOLEAN);
  PN_DEF   (nil_vt, "string", PN_LITERAL("nil"));
  PN_METHOD(nil_vt, "nil?",   potion_nil_is_nil,  0);
  PN_METHOD(nil_vt, "number", potion_bool_number, 0);
  PN_METHOD(boo_vt, "number", potion_bool_number, 0);
  PN_METHOD(boo_vt, "string", potion_bool_string, 0);
}
